#include "multitasker.h"


extern task_t task_vector[MAX_TASK];
extern int actual_task;

/*
Algoritmo mas sencillo de multitasking:
es una lista circular, y simplemente itera circularmente por las tareas.
*/
int next_task(){
	return task_vector[actual_task].next;
}

/*
Quita la tarea actual de la lista circular y le setea el estado 'state'
*/
void block(int state){
	task_vector[task_vector[actual_task].prev].next=task_vector[actual_task].next;
	task_vector[task_vector[actual_task].next].prev=task_vector[actual_task].prev;
	task_vector[actual_task].state=state;
}

/*
Agrega una tarea a la lista circular y le setea el estado listo
*/
void unblock(int task){
	task_vector[task].prev=actual_task;
	task_vector[task].next=task_vector[actual_task].next;
	task_vector[task_vector[task].prev].next=task;
	task_vector[task_vector[task].next].prev=task;
	
	task_vector[task].state=Ready;
	
}

/*
Arma una lista circular de un solo elemento igual a la tarea actual.
*/
void init_scheduler(){
	task_vector[actual_task].prev=actual_task;
	task_vector[actual_task].next=actual_task;
}
 
